/**
 * 库存服务类
 * 业务层级：业务逻辑层
 * 功能说明：为库存管理提供数据处理和业务逻辑实现，包括商品分类、库存查询、入库操作等功能
 * 架构关系：遵循四层架构设计，负责协调数据访问层和表现层交互，处理库存相关业务规则
 */
#ifndef INVENTORYSERVICE_H
#define INVENTORYSERVICE_H

#include <QObject>
#include <QVector>
#include <QMap>
#include <QVariant>

// 前置声明，减少编译依赖
class Database;
class InventoryDAO;
class ProductDAO;
class StockInDAO;

class InventoryService : public QObject
{
    Q_OBJECT
public:
    explicit InventoryService(Database *db, QObject *parent = nullptr);

    // 获取所有分类
    QVector<QMap<QString, QVariant>> getAllCategories();

    // 根据分类获取商品
    QVector<QMap<QString, QVariant>> getProductsByCategory(int categoryId);

    // 获取商品详情
    QMap<QString, QVariant> getProductDetails(int productId);

    // 获取当前库存
    int getCurrentStock(int productId);

    // 执行入库操作
    bool stockIn(int productId, int quantity, double purchasePrice,
                const QString &supplier, int operatorId, const QString &note = "");

    // 入库统计相关方法
    QVector<QMap<QString, QVariant>> getAllStockInRecords();
    QVector<QMap<QString, QVariant>> getStockInRecordsByCondition(
        const QString &startDate = "", const QString &endDate = "",
        int productId = -1, const QString &supplier = "");

private:
    ProductDAO *m_productDao;
    InventoryDAO *m_inventoryDao;
    StockInDAO *m_stockInDao;
};

#endif // INVENTORYSERVICE_H
